// 引入路由模块
import router from '@/router'
import store from '@/store'
// 全局前置导航守卫
router.beforeEach(async(to, from, next) => {
  const token = store.getters.token
  const url = to.path
  const whiteList = ['/login', '/404', '/test']

  // 1. 已登录, 还去登录页
  if (token && url === '/login') {
    // 到首页
    next('/')
  }

  // 2. 已登录, 去其他页面
  if (token && url !== '/login') {
    // 读取用户数据筛选路由
    // 在进入每个后台页面之前, 保证有用户数据
    // 确认用户数据是否存在, 如果不存在, 则获取数据
    if (!store.state.user.userInfo.username) {
      await store.dispatch('user/getUserInfo')
      // 拿完数据之后, 进入页面之前, 就是触发路由权限筛选的位置
      const routes = await store.dispatch('permission/filterRoutes', store.state.user.userInfo.roles.menus)
      // 路由自带的追加配置的函数
      router.addRoutes([
        ...routes,
        { path: '*', redirect: '/404', hidden: true }
      ])
      next(to.path)
      return
    }
    next()
  }

  // 3. 未登陆, 在白名单
  if (!token && whiteList.includes(url)) {
    next()
  }

  // 4. 未登陆, 不在白名单
  if (!token && !whiteList.includes(url)) {
    next('/login')
  }

  // if (token) {
  //   // 有登陆
  //   if (url === '/login') {
  //     // next 如果加上路径可以强制跳转
  //     next('/')
  //   } else {
  //     // 在进入每个后台页面之前, 保证有用户数据
  //     // 确认用户数据是否存在, 如果不存在, 则获取数据
  //     if (!store.state.user.userInfo.username) {
  //       await store.dispatch('user/getUserInfo')
  //       // 拿完数据之后, 进入页面之前, 就是触发路由权限筛选的位置
  //       const routes = await store.dispatch('permission/filterRoutes', store.state.user.userInfo.roles.menus)
  //       // 路由自带的追加配置的函数
  //       router.addRoutes([
  //         ...routes,
  //         { path: '*', redirect: '/404', hidden: true }
  //       ])
  //       next(to.path)
  //       return
  //     }
  //     next()
  //   }
  // } else {
  //   // 未登录
  //   // 判断 url 是否存在于白名单
  //   // if (whiteList.indexOf(url) !== -1) {
  //   if (whiteList.includes(url)) {
  //     next()
  //   } else {
  //     next('/login')
  //   }
  // }
})
